// 加入express
const express = require('express')
const app = express()

// 加入中间键
const expressJwt = require('express-jwt')
const jwt = require('jsonwebtoken')

var {getAccess_token,getUserId,saveUser,doGET} = require('./service.js');

var {existUser_} = require('./mysql'); 

// cors 跨域
var cors = require('cors');
app.use(cors({
    origin:['http://ip','http://ip','http://localhost:8081'],   //设置跨域域名
    credentials:true
}))

// 日志
var log4js = require('log4js');
log4js.configure('./log/log4js.json')
app.use(log4js.connectLogger(log4js.getLogger("cheese"), {level: log4js.levels.INFO}));
var logger  = log4js.getLogger();

// 端口号
const port = 8000
const sever = "http://ip" 

// 加密秘钥
const SECRECT = "secrect12345";
// 加入中间件
app.use(expressJwt({
    secret: SECRECT , // 签名的密钥 或 PublicKey
    algorithms:['HS256'], // 设置加密算法
    requestProperty: 'user', // 设置解析结果的变量名
    credentialsRequired: true, // 是否允许无token的请求  false 允许 true 禁止
    // 自定义解析token
    getToken:function(req){
        if(req.headers.token){
            var token = req.headers.token.split(' ')[1];
            return token;
        }
        return null;
    }
}).unless({
    path: ['/createToken','/test','/main','/WW_verify_eYqZUNebFhCZu0rl.txt']  // 指定路径不经过 Token 解析
}))

// 如果解析失败会抛出 UnauthorizedError 异常,捕获异常进行处理
app.use(function (err, req, res, next) {
    // 具体的逻辑
    if (err.name === 'UnauthorizedError') { 
        res.status(401).send('invalid token');
    }
})



// 与微信对接的接口
app.get('/main', (req, res) => {
    // 从回调中获取 code
    var code = req.query.code;
    getAccess_token().then(access_token=>{
        getUserId(access_token,code).then(userid=>{
            saveUser(access_token,userid).then(result=>{
                // 生成 token 
                var token  =  creatToken(userid);
                // 返回界面
                res.redirect(302, 'http://pkuxs.com:8001?token='+token)
            });
        })
    });
})


// 获取所有商品列表
app.get('/goods/list',(req,res)=>{
    var  url = sever+'/goods/list';
    doGET(url).then(data=>{
        res.send(data);
    })  
});

// 获取商品详情页
app.get('/goods/detail/*',(req,res)=>{
    var reqUrl = req.url;
    var  url = sever+reqUrl;
    doGET(url).then(data=>{
        // console.log(data);
        res.send(data);
    }) 
});

// 秒杀
app.get('/seckill/doSecKill',(req,res)=>{
    // http://59.110.168.33:8080/goods/list
    var goodsId = req.query.goodsId;
    var userid = req.user.id;
    var  url = sever+'/seckill/doSecKill?goodsId='+goodsId+'&id='+userid;
    doGET(url).then(data=>{
        res.send(data);
    })  
});



// 获取用户信息
app.get('/user/userInfo',(req,res)=>{
    var userid = req.user.id;
    var  url = sever+'/user/userInfo?id='+userid;
    doGET(url).then(data=>{
        // console.log(data);
        res.send(data);
    }); 
});


// 轮询接口
app.get('/seckill/getResult',(req,res)=>{
    var userid = req.user.id;
    var reqUrl =  req.url;
    var url = sever+reqUrl+'&id='+userid;
    doGET(url).then(data=>{
        res.send(data);
    })
})


// 修改地址接口
app.get('/user/addressInfo',(req,res)=>{
    var userid = req.user.id;
    var reqUrl =  req.url;
    var url = sever+reqUrl+'&id='+userid;
    doGET(url).then(data=>{
        res.send(data);
    }) 
})

// 获取用户订单
app.get('/seckill/orders',(req,res)=>{
    var userid = req.user.id;
    var reqUrl =  req.url;
    var url = sever+reqUrl+'?id='+userid;
    doGET(url).then(data=>{
        // console.log(data);
        res.send(data);
    }) 
})


// 生成token 
app.post('/createToken', (req, res) => {
    var  userid = req.query.id;
    var token  = creatToken(userid);
    res.json({"token":token});
})


// 生成token
function creatToken(userid){
    // 在前端去加'Bearer '
    var token  = jwt.sign(
        {   
            id:userid, // 设置负载
        },
        SECRECT, //设置秘钥
        {
           expiresIn: 3600 *2, //设置过期时间2小时
        }
    );
    return token;
}

// 授权文件
app.get('/WW_verify_eYqZUNebFhCZu0rl.txt',(req,res)=>{
    res.send("eYqZUNebFhCZu0rl");
})

app.listen(port, () => {
    console.log(`Example app listening at http://localhost:${port}`)
})
